home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Delphi Informant Complete 1995 - 2000
/
Delphi Informant Complete 1995 to 2000.iso
/
Delphi Informant Magazine Complete Works SOURCE CODE 1995.rar
/
1995
/
JUL
/
JO9507
/
track.pas
< prev
Wrap
Pascal/Delphi Source File
|
1995-05-26
|
15KB
|
512 lines
unit Track;
interface
uses
SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,
Forms, Dialogs, ExtCtrls, DBCtrls, StdCtrls, Mask, Buttons, Grids,
DBGrids, DB, DBTables;
const
DbStates : array[dsInactive..dsCalcFields] of string[12] =
('dsInactive', 'dsBrowse', 'dsEdit', 'dsInsert',
'dsSetKey', 'dsCalcFields');
type
TFrmDBTrack = class(TForm)
dsMaster: TDataSource;
tblMaster: TTable;
dsDetail: TDataSource;
DBGrid1: TDBGrid;
DBEdit1: TDBEdit;
DBEdit2: TDBEdit;
DBNavigator2: TDBNavigator;
lstEvent: TListBox;
btnClear: TBitBtn;
tblDetail: TTable;
DBEdit4: TDBEdit;
Label1: TLabel;
DBNavigator1: TDBNavigator;
edCount: TEdit;
cboTables: TComboBox;
Label2: TLabel;
GroupBox1: TGroupBox;
btnInsert: TBitBtn;
btnDelete: TBitBtn;
btnEdit: TBitBtn;
btnPost: TBitBtn;
btnCancel: TBitBtn;
btnOpen: TBitBtn;
btnClose: TBitBtn;
dlgSaveAs: TSaveDialog;
btnSaveList: TBitBtn;
tblMasterCustNo: TFloatField;
tblMasterCompany: TStringField;
tblMasterMyCalcField: TIntegerField;
Label3: TLabel;
Label4: TLabel;
procedure btnInsertClick(Sender: TObject);
procedure btnDeleteClick(Sender: TObject);
procedure btnEditClick(Sender: TObject);
procedure btnPostClick(Sender: TObject);
procedure btnCancelClick(Sender: TObject);
procedure btnClearClick(Sender: TObject);
procedure TrackDataChange(Sender: TObject; Field: TField);
procedure TrackStateChange(Sender: TObject);
procedure TrackUpdateData(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure TrackAfterCancel(DataSet: TDataset);
procedure TrackAfterClose(DataSet: TDataset);
procedure TrackAfterDelete(DataSet: TDataset);
procedure TrackAfterEdit(DataSet: TDataset);
procedure TrackAfterInsert(DataSet: TDataset);
procedure TrackAfterOpen(DataSet: TDataset);
procedure TrackAfterPost(DataSet: TDataset);
procedure TrackBeforeCancel(DataSet: TDataset);
procedure TrackBeforeClose(DataSet: TDataset);
procedure TrackBeforeDelete(DataSet: TDataset);
procedure TrackBeforeEdit(DataSet: TDataset);
procedure TrackBeforeInsert(DataSet: TDataset);
procedure TrackBeforeOpen(DataSet: TDataset);
procedure TrackBeforePost(DataSet: TDataset);
procedure TrackOnCalc(DataSet: TDataset);
procedure TrackNewRec(DataSet: TDataset);
procedure btnOpenClick(Sender: TObject);
procedure btnCloseClick(Sender: TObject);
procedure cboTablesChange(Sender: TObject);
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
procedure SaveEventList(Sender: TObject);
private
ListLen: Word;
IndentLevel: Byte;
CurrentTable: TTable;
CurrentSource: TDataSource;
procedure LogEvent(EventStr: string);
procedure ToggleButtons(StateParam: TDataSetState);
{ Private declarations }
public
{ Public declarations }
end;
var
FrmDBTrack: TFrmDBTrack;
implementation
{$R *.DFM}
procedure TFrmDBTrack.ToggleButtons(StateParam: TDataSetState);
var ButtonEnabled: Boolean;
begin
{
If the table is in edit or insert mode then disable the Insert
Delete and Edit buttons else disable the Post and Cancel buttons.
If the table is closed/inactive then disable all pushbuttons.
}
ButtonEnabled := not(StateParam in [dsEdit, dsInsert, dsInactive]);
btnInsert.Enabled := ButtonEnabled;
btnDelete.Enabled := ButtonEnabled;
btnEdit.Enabled := ButtonEnabled;
if StateParam = dsInactive then
begin
btnPost.Enabled := False;
btnCancel.Enabled := False;
end
else
begin
btnPost.Enabled := not ButtonEnabled;
btnCancel.Enabled := not ButtonEnabled;
end;
ButtonEnabled := (CurrentTable <> nil);
btnOpen.Enabled := ButtonEnabled;
btnClose.Enabled := ButtonEnabled;
end;
procedure TFrmDBTrack.LogEvent(EventStr: string);
var IndentStr: string[32];
i : byte;
begin
with lstEvent do
begin
IndentStr := '';
if IndentLevel > 0 then
begin
for i := 1 to IndentLevel do
IndentStr := IndentStr + ' ';
Items.Add(IndentStr + EventStr);
end
else
Items.Add(EventStr);
Inc(ListLen);
edCount.Text := IntToStr(ListLen);
ItemIndex := Items.Count - 1;
end;
btnSaveList.Enabled := (ListLen > 0);
end;
procedure TFrmDBTrack.TrackDataChange(Sender: TObject; Field: TField);
var ds: TDataSource;
begin
ds := Sender as TDataSource;
if (Field = nil) then
{ event was triggered by more than one field therefore
this event resulted from moving to another record }
LogEvent('OnDataChange for ' + ds.Name)
else
if ds.State in [dsEdit, dsInsert] then
{ event was triggered by a single field therefore
this event resulted from a single field value being
changed during editing }
LogEvent('OnDataChange for ' + ds.Name + '.' + Field.FieldName)
else
{ event occurred for single field whilst not in Edit/Insert }
LogEvent('OnDataChange for ' + ds.Name)
end;
procedure TFrmDBTrack.TrackStateChange(Sender: TObject);
var
MySender: TDataSource;
begin
MySender := Sender as TDataSource;
LogEvent('OnStateChange to ' +
DbStates[MySender.State] +
' for ' + MySender.Name);
{ don't want to try getting the name of an undefined dataset }
if MySender.DataSet <> nil then
LogEvent('Table state change to ' +
DbStates[TTable(MySender.DataSet).State] +
' for ' + TTable(MySender.DataSet).Name)
else
LogEvent('WARNING -- no dataset defined for ' + MySender.Name);
ToggleButtons(MySender.State)
end;
procedure TFrmDBTrack.TrackUpdateData(Sender: TObject);
begin
with (Sender as TDataSource) do
LogEvent('OnUpdateData for ' + Name);
end;
procedure TFrmDBTrack.btnInsertClick(Sender: TObject);
begin
LogEvent('Begin TTable.Insert');
Inc(IndentLevel);
CurrentTable.Insert;
Dec(IndentLevel);
LogEvent('End TTable.Insert');
end;
procedure TFrmDBTrack.btnDeleteClick(Sender: TObject);
begin
LogEvent('Begin TTable.Delete');
Inc(IndentLevel);
CurrentTable.Delete;
Dec(IndentLevel);
LogEvent('End TTable.Delete');
end;
procedure TFrmDBTrack.btnEditClick(Sender: TObject);
begin
LogEvent('Begin TTable.Edit');
Inc(IndentLevel);
CurrentTable.Edit;
Dec(IndentLevel);
LogEvent('End TTable.Edit');
end;
procedure TFrmDBTrack.btnPostClick(Sender: TObject);
begin
LogEvent('Begin TTable.Post');
Inc(IndentLevel);
CurrentTable.Post;
Dec(IndentLevel);
LogEvent('End TTable.Post');
end;
procedure TFrmDBTrack.btnCancelClick(Sender: TObject);
begin
LogEvent('Begin TTable.Cancel');
Inc(IndentLevel);
CurrentTable.Cancel;
Dec(IndentLevel);
LogEvent('End TTable.Cancel');
end;
procedure TFrmDBTrack.FormCreate(Sender: TObject);
var i: word;
begin
{ find all TDataSource objects on the form and add them to
the TStrings list associated with the TCombobox object }
with cboTables do
begin
for i := 0 to Self.ComponentCount - 1 do
if (Self.Components[i] is TDataSource) then
{ add the name and a pointer to the object to the list }
Items.AddObject(TDataSource(Self.Components[i]).Name,
TDataSource(Self.Components[i]));
{ the form's main pushbuttons will call TTable methods for
CurrentTable which defaults to the dataset of the first
TDataSource object